package com.wicket.okrpbff.biz.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.wicket.okrframework.integration.FwBaseDivineDataClient;
import com.wicket.okrframework.integration.FwBaseMemberClient;
import com.wicket.okrframework.integration.FwBaseUserClient;

import com.wicket.okrframework.integration.dto.*;
import com.wicket.okrpbff.biz.service.UserService;
import com.wicket.okrpbff.biz.service.dto.common.BffUsersDto;
import com.wicket.okrpbff.biz.service.dto.common.BffUsersUnionDto;
import com.wicket.okrpbff.biz.service.dto.req.*;
import com.wicket.okrpbff.biz.service.dto.req.BatchClearTokenFromRedisReqDto;
import com.wicket.okrpbff.biz.service.dto.req.BatchClearUserInfoFromRedisReqDto;
import com.wicket.okrpbff.biz.service.dto.res.*;
import com.wicket.okrpbff.biz.service.dto.res.BatchClearTokenFromRedisRespDto;
import com.wicket.okrpbff.biz.service.dto.res.BatchClearUserInfoFromRedisRespDto;
import com.wicket.okrpbff.biz.service.nb.NbUser;
import com.wicket.okrpbff.common.util.RedisUtil;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.stream.Collectors;
import com.wicket.okrpbff.common.exception.Assert;
import com.wicket.okrpbff.common.util.CommonFunctionHelper;

/**
 * @author ：
 * @date ：
 *
 *
 * @version 1.0
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    FwBaseUserClient fwBaseUserClient;
    @Resource
    FwBaseMemberClient fwBaseMemberClient;
    @Resource
    FwBaseDivineDataClient fwBaseDivineDataClient;
    @Resource
    NbUser nbUser;
    @Resource
    private RedisUtil redisUtil;

    /**
   * B1-2查询个人信息列表（平台）[421]
   * gen by moon at 10/18/2022, 10:05:15 PM
   */
    @Trace(operationName = "B1-2查询个人信息列表（平台）")
    @Tags({@Tag(key = "参数",value = "arg[0]"),
            @Tag(key = "返回值",value = "returnedObj")})
  @Override
  public BffQueryPersonalInformationListRespDto queryPersonalInformationList(BffQueryPersonalInformationListReqDto reqDto){
      
       
       QueryPersonalInformationListRespDto queryPersonalInformationListRespDto_1 =null;
//步骤0: D1-2查询个人信息列表 - queryPersonalInformationList
     QueryPersonalInformationListRespDto queryPersonalInformationListRespDto = null;
    QueryPersonalInformationListReqDto queryPersonalInformationListReqDto=new QueryPersonalInformationListReqDto();
  if(reqDto!=null){
      queryPersonalInformationListReqDto.setIdCardName(reqDto.getIdCardName());//SimpleFieldAssign//sourceId:30416_1
queryPersonalInformationListReqDto.setSourceCode(reqDto.getSourceCode());//SimpleFieldAssign//sourceId:30410_1
queryPersonalInformationListReqDto.setIsInvalid(reqDto.getIsInvalid());//SimpleFieldAssign//sourceId:30411_1
queryPersonalInformationListReqDto.setSenceId(reqDto.getSenceId());//SimpleFieldAssign//sourceId:30413_1
queryPersonalInformationListReqDto.setAppId(reqDto.getAppId());//SimpleFieldAssign//sourceId:30415_1
queryPersonalInformationListReqDto.setSearchStartTime(reqDto.getSearchStartTime());//SimpleFieldAssign//sourceId:47470_1
queryPersonalInformationListReqDto.setSearchEndTime(reqDto.getSearchEndTime());//SimpleFieldAssign//sourceId:47471_1
    }
  
    /*D1-2查询个人信息列表[420]   */
    Assert.isNull(queryPersonalInformationListReqDto.getAppId(),"B1-2查询个人信息列表（平台）-D1-2查询个人信息列表-创建于联盟应用ID不能为空",false);
      queryPersonalInformationListRespDto = fwBaseUserClient.queryPersonalInformationList(queryPersonalInformationListReqDto).getData();
      
      
      queryPersonalInformationListRespDto_1 = queryPersonalInformationListRespDto;
    
BffQueryPersonalInformationListRespDto retData = new BffQueryPersonalInformationListRespDto();
  if(queryPersonalInformationListRespDto_1!=null){
      retData.setUsersList(queryPersonalInformationListRespDto_1.getUserList().stream().map(item -> BeanUtil.toBean(item, BffUsersDto.class)).collect(Collectors.toList()));//objList-to-objLists//sourceId:30423_1
    }
  

  retData.setPageNum(queryPersonalInformationListRespDto.getPageNum());
        retData.setPageSize(queryPersonalInformationListRespDto.getPageSize());
        retData.setTotal(queryPersonalInformationListRespDto.getTotalNum());
        retData.setIsLastPage((Math.ceil(Double.valueOf(queryPersonalInformationListRespDto.getTotalNum()) / Double.valueOf(queryPersonalInformationListRespDto.getPageSize()))) <= retData.getPageNum());
        
  
return retData;
  }

    /**
   * B1-2取消失效个人账号（平台）[432]
   * gen by moon at 8/10/2022, 3:39:50 AM
   */
    @Trace(operationName = "B1-2取消失效个人账号（平台）")
    @Tags({@Tag(key = "参数",value = "arg[0]"),
            @Tag(key = "返回值",value = "returnedObj")})
  @Override
  public BffCancelIsinvalidSetUserIdRespDto cancelIsinvalidSetUserId(BffCancelIsinvalidSetUserIdReqDto reqDto){
      
       
       //步骤0: D1-2修改个人账号 - updateUser
     UpdateUserRespDto updateUserRespDto = null;
    UpdateUserReqDto updateUserReqDto=new UpdateUserReqDto();
  updateUserReqDto.setIsInvalid("FALSE");//sourceId:30760_1
if(updateUserReqDto!=null && updateUserReqDto.getIsInvalid() !=null &&updateUserReqDto.getIsInvalid().equals("FALSE")){
              updateUserReqDto.setInvalidReason(null);
          }//sourceId:30966_1
if(updateUserReqDto!=null && updateUserReqDto.getIsInvalid() !=null &&updateUserReqDto.getIsInvalid().equals("FALSE")){
              updateUserReqDto.setInvalidTime(null);
          }//sourceId:33132_1
if(reqDto!=null){
      updateUserReqDto.setUserId(reqDto.getUserId());//sourceId:30759_1
    }
  
    /*D1-2修改个人账号[1035]   */
    Assert.isNull(updateUserReqDto.getUserId(),"B1-2取消失效个人账号（平台）-D1-2修改个人账号-个人账号不能为空",false);
Assert.isNull(updateUserReqDto.getIsInvalid(),"B1-2取消失效个人账号（平台）-D1-2修改个人账号-是否失效不能为空",false);
Assert.isNull(updateUserReqDto.getInvalidType(),"B1-2取消失效个人账号（平台）-D1-2修改个人账号-失效类型不能为空",false);
Assert.isNull(updateUserReqDto.getInvalidReason(),"B1-2取消失效个人账号（平台）-D1-2修改个人账号-失效原因不能为空",false);
Assert.isNull(updateUserReqDto.getInvalidTime(),"B1-2取消失效个人账号（平台）-D1-2修改个人账号-失效时间不能为空",false);
      updateUserRespDto = fwBaseUserClient.updateUser(updateUserReqDto).getData();
      
      
    
BffCancelIsinvalidSetUserIdRespDto retData = new BffCancelIsinvalidSetUserIdRespDto();
  
  

  
  
return retData;
  }

    /**
   * B1-2设无效个人账号（平台）[430]
   * gen by moon at 8/10/2022, 3:39:49 AM
   */
    @Trace(operationName = "B1-2设无效个人账号（平台）")
    @Tags({@Tag(key = "参数",value = "arg[0]"),
            @Tag(key = "返回值",value = "returnedObj")})
  @Override
  public BffUpdateIsinvalidSetUserIdRespDto updateIsinvalidSetUserId(BffUpdateIsinvalidSetUserIdReqDto reqDto){
      
       
       //步骤0: D1-2修改个人账号 - updateUser
     UpdateUserRespDto updateUserRespDto = null;
    UpdateUserReqDto updateUserReqDto=new UpdateUserReqDto();
  updateUserReqDto.setIsInvalid("TRUE");//sourceId:30734_1
if(reqDto!=null){
      updateUserReqDto.setUserId(reqDto.getUserId());//sourceId:30733_1
updateUserReqDto.setInvalidType(reqDto.getInvalidType());//sourceId:30735_1
updateUserReqDto.setInvalidReason(reqDto.getInvalidReason());//sourceId:30736_1
    }
  
    /*D1-2修改个人账号[1035]   */
    Assert.isNull(updateUserReqDto.getUserId(),"B1-2设无效个人账号（平台）-D1-2修改个人账号-个人账号不能为空",false);
Assert.isNull(updateUserReqDto.getInvalidType(),"B1-2设无效个人账号（平台）-D1-2修改个人账号-失效类型不能为空",false);
      updateUserRespDto = fwBaseUserClient.updateUser(updateUserReqDto).getData();
      
      
    
//步骤1: D1-2查询身份人员列表 - queryBeginMemberList
     QueryBeginMemberListRespDto queryBeginMemberListRespDto = null;
    QueryBeginMemberListReqDto queryBeginMemberListReqDto=new QueryBeginMemberListReqDto();
  if(reqDto!=null){
      queryBeginMemberListReqDto.setUserId(reqDto.getUserId());//sourceId:51299_1
    }
  
    /*D1-2查询身份人员列表[988]   */
    
      queryBeginMemberListRespDto = fwBaseMemberClient.queryBeginMemberList(queryBeginMemberListReqDto).getData();
      
      
    
//步骤2: D-Redis批量清空用户Token - batchClearTokenFromRedis
     //ModelCode: batchClearTokenFromRedis
        BatchClearTokenFromRedisRespDto batchClearTokenFromRedisRes = null;
    if(queryBeginMemberListRespDto !=null){
          BatchClearTokenFromRedisReqDto batchClearTokenFromRedisReq=new BatchClearTokenFromRedisReqDto();
  if(queryBeginMemberListRespDto!=null){
      batchClearTokenFromRedisReq.setBeginMemberList(queryBeginMemberListRespDto.getBeginMemberList().stream().map(item->item.getOriginalRoleMemberId())
        .collect(Collectors.toList()));//sourceId:51316_1
    }
  
    /*D-Redis批量清空用户Token[1712]  入参身份ID集合，清除用户token */
    
      batchClearTokenFromRedisRes = nbUser.batchClearTokenFromRedis(batchClearTokenFromRedisReq);
      
      
           }
    
//步骤3: Redis批量清空用户信息 - batchClearUserInfoFromRedis
     //ModelCode: batchClearUserInfoFromRedis
        BatchClearUserInfoFromRedisRespDto batchClearUserInfoFromRedisRes = null;
    if(queryBeginMemberListRespDto !=null){
          BatchClearUserInfoFromRedisReqDto batchClearUserInfoFromRedisReq=new BatchClearUserInfoFromRedisReqDto();
  if(queryBeginMemberListRespDto!=null){
      batchClearUserInfoFromRedisReq.setBeginMemberList(queryBeginMemberListRespDto.getBeginMemberList().stream().map(item->item.getOriginalRoleMemberId())
        .collect(Collectors.toList()));//sourceId:51317_1
    }
  
    /*Redis批量清空用户信息[1713]  入参身份ID数据集，清除用户就职信息缓存 */
    
      batchClearUserInfoFromRedisRes = nbUser.batchClearUserInfoFromRedis(batchClearUserInfoFromRedisReq);
      
      
           }
    
BffUpdateIsinvalidSetUserIdRespDto retData = new BffUpdateIsinvalidSetUserIdRespDto();
  
  

  
  
return retData;
  }

    /**
   * B1-2查询个人信息详情（平台）[424]
   * gen by moon at 10/18/2022, 6:05:42 AM
   */
    @Trace(operationName = "B1-2查询个人信息详情（平台）")
    @Tags({@Tag(key = "参数",value = "arg[0]"),
            @Tag(key = "返回值",value = "returnedObj")})
  @Override
  public BffQueryPersonalInformationDetailRespDto queryPersonalInformationDetail(BffQueryPersonalInformationDetailReqDto reqDto){
      
       
       QueryPersonalInformationDetailRespDto queryPersonalInformationDetailRespDto_1 =null;
QueryUsersUnionDetailRespDto queryUsersUnionDetailRespDto_1 =null;
//步骤0: D1-2查询个人信息详情 - queryPersonalInformationDetail
     QueryPersonalInformationDetailRespDto queryPersonalInformationDetailRespDto = null;
    QueryPersonalInformationDetailReqDto queryPersonalInformationDetailReqDto=new QueryPersonalInformationDetailReqDto();
  if(reqDto!=null){
      queryPersonalInformationDetailReqDto.setUserId(reqDto.getUserId());//SimpleFieldAssign//sourceId:30500_1
    }
  
    /*D1-2查询个人信息详情[398]   */
    Assert.isNull(queryPersonalInformationDetailReqDto.getUserId(),"B1-2查询个人信息详情（平台）-D1-2查询个人信息详情-个人账号不能为空",false);
      queryPersonalInformationDetailRespDto = fwBaseUserClient.queryPersonalInformationDetail(queryPersonalInformationDetailReqDto).getData();
      
      
      queryPersonalInformationDetailRespDto_1 = queryPersonalInformationDetailRespDto;
    
//步骤1: D1-2查询联盟用户列表 - queryUsersUnionDetail
     QueryUsersUnionDetailRespDto queryUsersUnionDetailRespDto = null;
    QueryUsersUnionDetailReqDto queryUsersUnionDetailReqDto=new QueryUsersUnionDetailReqDto();
  if(reqDto!=null){
      queryUsersUnionDetailReqDto.setUserId(reqDto.getUserId());//SimpleFieldAssign//sourceId:30536_1
    }
  
    /*D1-2查询联盟用户列表[423] 1、通过这个联盟应用对象类型CODE，展示前端固定的图标；
2、联盟应用对象id里面存的是用户相对唯一的应用账号ID（比如微信的OpenID）
3、展示绑定后的用户名：比如微信的artistcenter，我们自己联盟应用，显示个人账号对应的用户名；  */
    Assert.isNull(queryUsersUnionDetailReqDto.getUserId(),"B1-2查询个人信息详情（平台）-D1-2查询联盟用户列表-个人账号不能为空",false);
      queryUsersUnionDetailRespDto = fwBaseUserClient.queryUsersUnionDetail(queryUsersUnionDetailReqDto).getData();
      
      
      queryUsersUnionDetailRespDto_1 = queryUsersUnionDetailRespDto;
    
BffQueryPersonalInformationDetailRespDto retData = new BffQueryPersonalInformationDetailRespDto();
  if(queryPersonalInformationDetailRespDto_1!=null){
      retData.setUserId(queryPersonalInformationDetailRespDto_1.getUserId());//SimpleFieldAssign//sourceId:30537_1
retData.setUserName(queryPersonalInformationDetailRespDto_1.getUserName());//SimpleFieldAssign//sourceId:30538_1
retData.setEmail(queryPersonalInformationDetailRespDto_1.getEmail());//SimpleFieldAssign//sourceId:30539_1
retData.setPassByEmail(queryPersonalInformationDetailRespDto_1.getPassByEmail());//SimpleFieldAssign//sourceId:30540_1
retData.setPhone(queryPersonalInformationDetailRespDto_1.getPhone());//SimpleFieldAssign//sourceId:30541_1
retData.setPassByPhone(queryPersonalInformationDetailRespDto_1.getPassByPhone());//SimpleFieldAssign//sourceId:30542_1
retData.setIsUserInfoDone(queryPersonalInformationDetailRespDto_1.getIsUserInfoDone());//SimpleFieldAssign//sourceId:30543_1
retData.setRegTime(queryPersonalInformationDetailRespDto_1.getRegTime());//SimpleFieldAssign//sourceId:30544_1
retData.setLastLoginTime(queryPersonalInformationDetailRespDto_1.getLastLoginTime());//SimpleFieldAssign//sourceId:30545_1
retData.setLastLoginIp(queryPersonalInformationDetailRespDto_1.getLastLoginIp());//SimpleFieldAssign//sourceId:30546_1
retData.setLastPasswordChangedTime(queryPersonalInformationDetailRespDto_1.getLastPasswordChangedTime());//SimpleFieldAssign//sourceId:30547_1
retData.setLastLockoutTime(queryPersonalInformationDetailRespDto_1.getLastLockoutTime());//SimpleFieldAssign//sourceId:30548_1
retData.setFailedPasswordAttemptCount(queryPersonalInformationDetailRespDto_1.getFailedPasswordAttemptCount());//SimpleFieldAssign//sourceId:30549_1
retData.setFirstFailedPasswordAttempTime(queryPersonalInformationDetailRespDto_1.getFirstFailedPasswordAttempTime());//SimpleFieldAssign//sourceId:30550_1
retData.setDevName(queryPersonalInformationDetailRespDto_1.getDevName());//SimpleFieldAssign//sourceId:30551_1
retData.setSourceCode(queryPersonalInformationDetailRespDto_1.getSourceCode());//SimpleFieldAssign//sourceId:30552_1
retData.setIsInvalid(queryPersonalInformationDetailRespDto_1.getIsInvalid());//SimpleFieldAssign//sourceId:30553_1
retData.setInvalidType(queryPersonalInformationDetailRespDto_1.getInvalidType());//SimpleFieldAssign//sourceId:30554_1
retData.setInvalidReason(queryPersonalInformationDetailRespDto_1.getInvalidReason());//SimpleFieldAssign//sourceId:30555_1
retData.setAppId(queryPersonalInformationDetailRespDto_1.getAppId());//SimpleFieldAssign//sourceId:30557_1
retData.setUserIntro(queryPersonalInformationDetailRespDto_1.getUserIntro());//SimpleFieldAssign//sourceId:30561_1
retData.setSex(queryPersonalInformationDetailRespDto_1.getSex());//SimpleFieldAssign//sourceId:30562_1
retData.setBirthday(queryPersonalInformationDetailRespDto_1.getBirthday());//SimpleFieldAssign//sourceId:30563_1
retData.setCity(queryPersonalInformationDetailRespDto_1.getCity());//SimpleFieldAssign//sourceId:30564_1
retData.setAppName(queryPersonalInformationDetailRespDto_1.getAppName());//SimpleFieldAssign//sourceId:30565_1
retData.setInviteUserId(queryPersonalInformationDetailRespDto_1.getInviteUserId());//SimpleFieldAssign//sourceId:30556_1
retData.setUserFace(queryPersonalInformationDetailRespDto_1.getUserFace());//SimpleFieldAssign//sourceId:67328_1
retData.setIdCardName(queryPersonalInformationDetailRespDto_1.getIdCardName());//SimpleFieldAssign//sourceId:67329_1
retData.setNickName(queryPersonalInformationDetailRespDto_1.getNickName());//SimpleFieldAssign//sourceId:67330_1
retData.setInviteUserIdCardName(queryPersonalInformationDetailRespDto_1.getInviteUserIdCardName());//SimpleFieldAssign//sourceId:67331_1
retData.setInviteUserFace(queryPersonalInformationDetailRespDto_1.getInviteUserFace());//SimpleFieldAssign//sourceId:67332_1
retData.setInviteNickName(queryPersonalInformationDetailRespDto_1.getInviteNickName());//SimpleFieldAssign//sourceId:67333_1
    }
if(queryUsersUnionDetailRespDto_1!=null){
      retData.setUsersUnionList(queryUsersUnionDetailRespDto_1.getUsersUnionList().stream().map(item -> BeanUtil.toBean(item, BffUsersUnionDto.class)).collect(Collectors.toList()));//objList-to-objLists//sourceId:30573_1
    }
  

  
  
return retData;
  }
///**
//   * B1查询个人资料详情(公共)[7041]
//   * gen by moon at 5/31/2023, 6:28:20 PM
//   */
//    @Trace(operationName = "B1查询个人资料详情(公共)")
//    @Tags({@Tag(key = "参数",value = "arg[0]"),
//            @Tag(key = "返回值",value = "returnedObj")})
//  @Override
//  public BffQueryUserInfoDetailComRespDto queryUserInfoDetailCom(BffQueryUserInfoDetailComReqDto reqDto){
//
//
//       QueryUserInfoDetailComRespDto queryUserInfoDetailComRespDto_1 =null;
////步骤0: D1-2查询个人资料详情(公共) - queryUserInfoDetailCom
//     QueryUserInfoDetailComRespDto queryUserInfoDetailComRespDto = null;
//    QueryUserInfoDetailComReqDto queryUserInfoDetailComReqDto=new QueryUserInfoDetailComReqDto();
//  queryUserInfoDetailComReqDto.setUserId(CommonFunctionHelper.getBaseInfoFromLocal().getSpecUserId());//CURRENT_USERID//sourceId:996633_1
//
//    /*D1-2查询个人资料详情(公共)[408]   */
//    Assert.isNull(queryUserInfoDetailComReqDto.getUserId(),"B1查询个人资料详情(公共)-D1-2查询个人资料详情(公共)-账号不能为空",false);
//      queryUserInfoDetailComRespDto = fwBaseUserClient.queryUserInfoDetailCom(queryUserInfoDetailComReqDto).getData()/*vcase invoke 跨dubbo调用;*/;
//
//
//      queryUserInfoDetailComRespDto_1 = queryUserInfoDetailComRespDto;
//
//BffQueryUserInfoDetailComRespDto retData = new BffQueryUserInfoDetailComRespDto();
//  if(queryUserInfoDetailComRespDto_1!=null){
//      retData.setPersonalDataId(queryUserInfoDetailComRespDto_1.getPersonalDataId());//SimpleFieldAssign//sourceId:996644_1
//retData.setUserId(queryUserInfoDetailComRespDto_1.getUserId());//SimpleFieldAssign//sourceId:996645_1
//retData.setUserFace(queryUserInfoDetailComRespDto_1.getUserFace());//SimpleFieldAssign//sourceId:996646_1
//retData.setIdCardName(queryUserInfoDetailComRespDto_1.getIdCardName());//SimpleFieldAssign//sourceId:996647_1
//retData.setNickName(queryUserInfoDetailComRespDto_1.getNickName());//SimpleFieldAssign//sourceId:996648_1
//retData.setSex(queryUserInfoDetailComRespDto_1.getSex());//SimpleFieldAssign//sourceId:996649_1
//    }
//
//
//
//
//return retData;
//  }
//    //
}
